URPでただ画像を描画するシェーダー

June 11, 2022


URPで画像を描画するだけのシェーダー

ユニティちゃんを描画します 40F7067DC8753926E1F31297342A478E

これからはURPがメインになるのでHLSLのお作法になれるためにもまずは基本から学ぼうと思います

Shader "Custom/Simple"
{
	Properties
	{
		_MainTex ("Main Tex", 2D) = "while" {}
	}

	SubShader
	{ 
		Tags
		{ 
			// 透明度指定
			"RenderType" = "Transparent"
      "RenderPipeline" = "UniversalPipeline"
      "IgnoreProjector" = "True"
			"Queue" = "Transparent"
		}

		// アルファブレンド指定
		Blend SrcAlpha OneMinusSrcAlpha 

		Pass
		{
			HLSLPROGRAM // HLSLからはこれで囲むようになった

			// 頂点&フラグメントシェーダー指定
			#pragma vertex vert
			#pragma fragment flag

			// HLSLのマクロやメソッドの読み込み
	    #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

			struct Attributes
			{
				float4 positionOS : POSITION;
				float2 uv : TEXCOORD0; // テクスチャ座標
			};
			struct Varyings
			{
				float4 positionHCS : SV_POSITION;
				float2 uv : TEXCOORD0; // テクスチャ座標
			};

			sampler2D _MainTex;

			// 頂点シェーダー
			Varyings vert(Attributes IN)
			{
				Varyings o;
				o.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
				o.uv = IN.uv;
				return o;
			}

			// フラグメントシェーダー
			half4 flag(Varyings IN) : SV_Target
			{
				// 保管されたUV座標でテクスチャから色を得る
				return tex2D(_MainTex, IN.uv);
			}

			// 終了
		  ENDHLSL
		}
	}
}

ユニティちゃんを読み込ませたあと、RawImageにアタッチ。 Shader作成して上記をコピペしてマテリアルに指したあと、上記のRawImageに入れれば描画されます

とりあえずこれで問題なくテクスチャが描画されるようになりました ��ました